MineMeldを使ってみた(Office 365で利用しているIPアドレス一覧を生成する)
はじめに
中山(順)です
今日は、パロアルトネットワークス社が提供するMineMeldについてご紹介します
MineMeldとは
FWやIPS/IDS、WAFなどのセキュリティ製品を運用するの、大変ですよね。
組織内からとあるSaaS使いたいから通信を許可してくれと言われてホワイトリストを作ることもあれば、 DDoSくらって特定のIPからのインバウンド通信を止めたりC&Cサーバーへ何らかの通信してるっぽい挙動を検知してアウトバウンド通信を止めたり。
MineMeldは、ブラックリストやホワイトリストに追加したいIPアドレスやURLのリストを動的に生成してくれる便利なツールです。 様々なOSINT(Open source intelligence)からIPアドレス等の情報を収集し、重複を排除したり、いい感じに整形してくれるそうです。
開発元のPaloAlto社の製品向けに最適化されていますが、OSSとして無償で利用することも可能です。
使ってみた
ドキュメントを読んだだけではイマイチ分からなかったのでとりあえず手を動かしてみます。
今回は、Office 365で利用されているIPアドレスおよびURLの一覧を出力してみたいと思います。
インスタンスの作成
まずはMineMeldを実行する環境を作成します。
なんと、CloudFormationテンプレートが用意されています。 これでサクッと起動します。
Running MineMeld on Amazon EC2
STACK_NAME="minemeld" KEY_NAME="xxxxxxxx" CLIENT_LOCATION="xxx.xxx.xxx.xxx/32" aws cloudformation create-stack \ --stack-name ${STACK_NAME} \ --template-url https://minemeld-dist.s3.amazonaws.com/0_9/minemeld-cfn-latest.json \ --parameters ParameterKey=InstanceKeyName,ParameterValue=${KEY_NAME} ParameterKey=ClientLocation,ParameterValue=${CLIENT_LOCATION}
{ "StackId": "arn:aws:cloudformation:ap-northeast-1:xxxxxxxxxxxx:stack/minemeld/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" }
ログイン先を確認しましょう。
aws cloudformation describe-stacks \ --stack-name ${STACK_NAME} \ --query Stacks[0].Outputs[?OutputKey==`MinemeldAddress`].OutputValue \ --output text
ec2-xx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com
ログイン
httpsでアクセスできると思いますので、初期パスワードでログインしましょう。
設定のインポート
画面上部の"Config"から設定を追加します。
設定は、"import"から追加することが可能です。
設定は、こちらのブログから拝借します。
How to Safely Enable access to Office 365 using MineMeld
こちらの設定ファイルを利用したいと思います。
nodes: office365_IPv4s: inputs: - office365_ipv4aggregator output: false prototype: stdlib.feedHCWithValue office365_IPv6s: inputs: - office365_ipv6aggregator output: false prototype: stdlib.feedHCWithValue office365_URLaggregator: inputs: - office365_any output: true prototype: stdlib.aggregatorURL office365_URLs: inputs: - office365_URLaggregator output: false prototype: stdlib.feedHCWithValue office365_ipv4aggregator: inputs: - office365_any output: true prototype: stdlib.aggregatorIPv4Generic office365_ipv6aggregator: inputs: - office365_any output: true prototype: stdlib.aggregatorIPv6Simple office365_any: inputs: [] output: true prototype: office365.any
YAMLの設定ファイルをコピペし、"REPLACE"をクリックします。
すると、大きく3種類のNodeが設定されます(まだコミットされていません)。
- MINER
- PROCESSER
- OUTPUT
これらは、それぞれ情報の収集・分類・配信を担当します。 各ノードは前後の処理を行うノードと関連付けられています。
"COMMIT"をクリックすると、サービスが再起動し、置き換えられた設定が読み込まれます。
結果の確認
画面上部の"Node"をクリックします。
いくつかのNodeが表示されています。 今回は、IPv4のアドレスリストを確認するため、"office365_IPv4s (OUTPUT)"を選択します。
Nodeを開くと、Feed URLが表示されます。 ここから、IPアドレスのリストを取得することかできます。
それでは、結果を表示してみましょう(一部だけ表示します)。
curl https://ec2-xx-xx-xx-xx.ap-northeast-1.compute.amazonaws.com/feeds/office365_IPv4s -k | tail
65.55.239.168-65.55.239.168 65.55.88.0-65.55.88.255 70.37.151.128-70.37.151.255 70.37.154.128-70.37.154.255 70.37.96.155-70.37.96.155 70.37.97.234-70.37.97.234 94.245.108.85-94.245.108.85 94.245.117.53-94.245.117.53 94.245.120.64-94.245.120.127 94.245.88.28-94.245.88.28
答え合わせ
Office 365で利用しているIPアドレスはこちらで確認することが可能です。
Office 365 URLs and IP address ranges
まとめ
このように、MineMeldを使うことで動的に変化する(メンテナンスしなければならない)アクセス制御設定をいい感じに省力化できそうです。
商用のOSINTもサポートしているらしいので、高い精度を求める場合にはそれらを利用するといいでしょう。
また、今回は組み込み済みのMinerを利用しましたが、独自に開発することもできるようです。
触ってみて、AWS WAFと連携して何か面白いことできないかなー、なんて思ったので、機会があればまた触ってみようと思います。
現場からは以上です。